package es.javamyadmin.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import es.javamyadmin.dao.TablesDAO;
import es.javamyadmin.pojo.Error;

/**
 * Servlet que crea las tablas
 * @author Emilio Castillo Gonzalez
 *  @author Hector Delgado Duran
 *
 */
public class CrearTabla extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3523404871224888334L;

	/**
	 * Metodo que crea la tabla
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String user = request.getParameter("user");
		String pass = request.getParameter("pass");
		String host = request.getParameter("host");
		String port = request.getParameter("port");
		String database = request.getParameter("database");
		String create = "create table " + request.getParameter("nombreTabla") + "(";
		String nombre = null;
		String tipo = null;
		String longitud = null;
		String defaul = null;
		String atributos = null;
		String nulo = null;
		String ai = null;
		String pKey = null;
		Error error = null;
		int i = 1;
		while(request.getParameter("nombreCampo" + i) != null){
			nombre = request.getParameter("nombreCampo" + i);
			tipo = request.getParameter("tipo" + i);
			longitud = request.getParameter("longitud" + i);
			defaul = request.getParameter("default" + i);
			atributos = request.getParameter("atributos" + i);
			nulo = request.getParameter("nulo" + i);
			ai = request.getParameter("a_i" + i);
			pKey = request.getParameter("atr" + i);
			if(nombre != null && !nombre.trim().equals("")){
				create = create + " " + nombre;
			}
			else{
				error = new Error("No se ha introducido el nombre de un campo de la tabla","","");
				break;
			}
			if(tipo != null &&  !tipo.trim().equals("")){
				if(longitud != null && !longitud.trim().equals("")){
					create = create + " " + tipo + "(" + longitud + ")";
				}
				else{
					create = create + " " + tipo;
				}
			}else{
				error = new Error("No se ha introducido bien el tipo de dato de un campo de la tabla","","");
				break;
			}
			if(atributos != null && !atributos.equalsIgnoreCase("BINARY")){
				create = create + " " + atributos;
			}
			if(defaul != null && !defaul.trim().equals("") && !defaul.trim().equals("null")){
				if(tipo.indexOf("int") != -1){
					create = create + " default " + defaul;
				}
				else{
					create = create + " default '" + defaul + "'";
				}
			}
			
			if(nulo != null){
				create = create + " NOT NULL";
			}
			if(pKey != null){
				create = create + " " + pKey;
			}
			
			if(ai != null){
				create = create + " auto_increment";
			}
			
			create = create + ", ";
			nombre = null;
			tipo = null;
			longitud = null;
			defaul = null;
			atributos = null;
			nulo = null;
			ai = null;
			pKey = null;
			i++;
		}
		create = create.substring(0 , create.length() - 2);
		create = create + ") ENGINE=" + request.getParameter("motorAlmacenamiento");
		
		if(error == null){
			TablesDAO crearTabla = new TablesDAO();
			crearTabla.setPath(getServletContext().getResourceAsStream("/WEB-INF/properties/mensajes.properties"));
			System.out.println(create);
			try {
				error = crearTabla.create(user, pass, host, port, database, create);
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
			if(error != null && error.getError() != null && error.getError().trim().equals("")){
				System.out.println("<CrearTabla> -post- error: " + error.getError());
				request.setAttribute("error", error.getError());
				if(!error.getDescripcion().equals("")){
					request.setAttribute("descripcion", error.getDescripcion().replace("'", "\\'"));
				}
			}
			
			
		}
		if(error == null){
			request.setAttribute("ok", "Tabla creada satisfactoriamente.");
			request.getRequestDispatcher("/jsp/lista-tablas-bd.jsp?bd="+database).forward(request,response);
		}
		else{
			if(error.getError() != null && !error.getError().trim().equals("")){
				request.setAttribute("error", error.getError());
				if(error.getDescripcion() != null  && !error.getDescripcion().trim().equals("")){
					request.setAttribute("descripcion", error.getDescripcion().replace("'", "\\'"));
				}
			}
			request.setAttribute("numCampos", request.getParameter("numCampos"));
			request.setAttribute("nombreTabla", request.getParameter("nombreTabla"));
			request.getRequestDispatcher("/jsp/crear-tabla.jsp?bd="+database).forward(request,response);
		}
		
		
	}

}
